]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
allView: Remove icon from folder when dropping outside
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>
Sat, 29 Jun 2019 04:26:08 +0000 (01:26 -0300)
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>
Thu, 8 Aug 2019 12:11:59 +0000 (09:11 -0300)
When dropping an app icon to outside the folder, remove the
app from that folder. GNOME Shell is already smart enough
to figure out the setting changes and update the icons.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/664

js/ui/appDisplay.js

index 4cfea7e9cbd993e75694bfa2b85843908b7a49f2..6b3095eae05d21af4b3303ade52a2872766e1552 100644 (file)
@@ -737,6 +737,37 @@ var AllView = class AllView extends BaseAppView {
         }
     }
 
+    _canAccept(source) {
+        if (!(source instanceof AppIcon))
+            return false;
+
+        let view = _getViewFromIcon(source);
+        if (!(view instanceof FolderView))
+            return false;
+
+        return true;
+    }
+
+    handleDragOver(source) {
+        if (!this._canAccept(source))
+            return DND.DragMotionResult.NO_DROP;
+
+        return DND.DragMotionResult.MOVE_DROP;
+    }
+
+    acceptDrop(source) {
+        if (!this._canAccept(source))
+            return false;
+
+        let view = _getViewFromIcon(source);
+        view.removeApp(source.app);
+
+        if (this._currentPopup)
+            this._currentPopup.popdown();
+
+        return true;
+    }
+
     inhibitEventBlocker() {
         this._nEventBlockerInhibits++;
         this._eventBlocker.visible = this._nEventBlockerInhibits == 0;
@@ -1258,6 +1289,26 @@ var FolderView = class FolderView extends BaseAppView {
 
         return apps;
     }
+
+    removeApp(app) {
+        let folderApps = this._folder.get_strv('apps');
+        let index = folderApps.indexOf(app.id);
+        if (index >= 0) {
+            folderApps.splice(index, 1);
+            this._folder.set_strv('apps', folderApps);
+        }
+
+        // If this is a categories-based folder, also add it to
+        // the list of excluded apps
+        let categories = this._folder.get_strv('categories');
+        if (categories.length > 0) {
+            let excludedApps = this._folder.get_strv('excluded-apps');
+            excludedApps.push(app.id);
+            this._folder.set_strv('excluded-apps', excludedApps);
+        }
+
+        return true;
+    }
 };
 
 var FolderIcon = class FolderIcon {